#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QFile>
#include <QFileInfo>
#include <QFileDialog>
#include <QDateTime>
#include <QDebug>
#include <QMessageBox>
#include <QTimer>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    QSerialPort serialPort;
    int fileSizeAll = 0;            //需要读取的文件大小
    int sendNumber = 0;             //总共需要发送的包的数量
    int sendNumberSN = 0;           //正在发送的数字序号
    int binSN = 1;                  //给bin包的第2位加上序号，起始01
    int binSNOppsoite = 255;        //给bin包的第3位加上序号，起始255
    int progressBar = 0;
    int updateFailedTimer;          //升级失败定时器
    bool receive43 = true;
    QTimer delayReadTimer;
    QByteArray dataAllArray;

    QString CRC16(QString data);

    uint16_t crc16(const QByteArray &data);

    unsigned char Check_CRC(const QByteArray &buf, int len);

    void serialPortInit();

    void analyseFile();

    void serialPortWrite(QString dataStr);

    void timerEvent(QTimerEvent *event);

    void serialPortRead();

    void delayReadTimerStart();

    void SendArray();

    QByteArray intToByte(int i);

    int bytesToInt(uchar bytes);

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_4_clicked();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
